package cn.beausoft.mybatis3.test.dao.auto;

import cn.beausoft.mybatis3.sqlbuild.Handle;
import cn.beausoft.mybatis3.sqlbuild.condition.ManyCondition;
import cn.beausoft.mybatis3.sqlbuild.dao.ReadBaseDao;
import cn.beausoft.mybatis3.sqlbuild.dao.WriteBaseDao;
import cn.beausoft.mybatis3.sqlbuild.query.QColumn;
import cn.beausoft.mybatis3.sqlbuild.query.QTable;
import cn.beausoft.mybatis3.test.entity.FileType;
import java.util.List;

/**
 * 资源文件类型
 * @author hjp
 **/
public interface FileTypeAutoDao extends ReadBaseDao<FileType>, WriteBaseDao<FileType> {
    QTable<FileType> TABLE = new QTable<>("file_type");   //资源文件类型
    //region filds
    QColumn<FileType, Integer> id = new QColumn<>(TABLE, "id");    //文件类型
    QColumn<FileType, String> name = new QColumn<>(TABLE, "name");    //文件名称
    QColumn<FileType, String> code = new QColumn<>(TABLE, "code");    //别名
    QColumn<FileType, String> suffix = new QColumn<>(TABLE, "suffix");    //文件后缀
    //所有字段
    QColumn<FileType, ?>[] ALL_FIELDS = new QColumn[]{ id , name , code , suffix};
    //endregion

    //查询处理 handle
    Handle<FileType, ManyCondition> SELECT_WHERE_HANDLE = (bean) -> {
        ManyCondition conditions = new ManyCondition();
        if (bean.getId() != null) {
            conditions.add(id.toEqCondition(bean.getId()));
        }
        if (bean.getName() != null) {
            conditions.add(name.toEqCondition(bean.getName()));
        }
        if (bean.getCode() != null) {
            conditions.add(code.toEqCondition(bean.getCode()));
        }
        if (bean.getSuffix() != null) {
            conditions.add(suffix.toEqCondition(bean.getSuffix()));
        }
        return conditions;
    };

    /**
    * 根据主键 查询
    */
    List<FileType> selectById(Integer id);

    /**
    * 根据主键 查询
    */
    List<FileType> selectByName(String name);

    /**
    * 根据主键 查询
    */
    FileType selectByIdAndName(Integer id, String name);

    /**
    * 根据主键 更新
    */
    int updateById(FileType bean);

    /**
    * 根据主键 更新指定字段
    */
    int updateSelectiveById(FileType bean);

    /**
    * 根据主键 更新
    */
    int updateByName(FileType bean);

    /**
    * 根据主键 更新指定字段
    */
    int updateSelectiveByName(FileType bean);
    /**
    * 根据主键 更新
    */
    int updateByIdAndName(FileType bean);

    /**
    * 根据主键 更新指定字段
    */
    int updateSelectiveByIdAndName(FileType bean);

    /**
    * 根据主键 删除
    */
    int deleteById(Integer id);

    /**
    * 根据主键 删除
    */
    int deleteByName(String name);

    /**
    * 根据主键 删除
    */
    int deleteByIdAndName(Integer id, String name);
}